#ifndef __MYLOGGER_HPP__
#define __MYLOGGER_HPP__

#include "log4cpp/Category.hh"
#include "log4cpp/PatternLayout.hh"
#include "log4cpp/OstreamAppender.hh"
#include "log4cpp/FileAppender.hh"
#include "log4cpp/RollingFileAppender.hh"
#include "log4cpp/Layout.hh"
#include "log4cpp/Priority.hh"
#include <iostream>
#include <string>

// //定义一个在日志后添加 文件名 函数名 行号 的宏定义
// #define addPrefix(msg) std::string(msg).append(" ##")\
//         .append(__FILE__).append(":").append(__func__)\
//         .append(":").append(int2string(__LINE__))\
//         .append("##").c_str()

//定义一个在日志后添加 文件名 函数名 行号 的宏定义
#define addPrefix(msg) std::string("[").append(__FILE__)\
                                       .append(":").append(__func__)\
                                       .append(":").append(std::to_string(__LINE__))\
                                       .append("]").append(msg).c_str()
#define LogWarn(msg) MyLogger::getInstance()->warn(addPrefix(msg))
#define LogError(msg) MyLogger::getInstance()->error(addPrefix(msg))
#define LogInfo(msg) MyLogger::getInstance()->info(addPrefix(msg))
#define LogDebug(msg) MyLogger::getInstance()->debug(addPrefix(msg))

class MyLogger{
public:
    void warn(const char *msg);
    void error(const char *msg);
    void debug(const char *msg);
    void info(const char *msg);
    static MyLogger * getInstance();
    static void destory();
private:
    MyLogger();
    ~MyLogger();
private:
    log4cpp::Category & _mycat;
    static MyLogger * _pInstance;
};

#endif